package util;

import org.springframework.web.multipart.MultipartFile;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class OltFileUtil {
    public static File SaveFile(MultipartFile multipartFile){
        try {
            // 获取文件的名称
            String originalFilename = multipartFile.getOriginalFilename();
            // 文件后缀 例如：.png
            String fileSuffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // uuid 生成文件名
            String uuid = String.valueOf(UUID.randomUUID());
            // 根路径，在 resources/static/upload
            // 新的文件名，使用uuid生成文件名
            String fileName = uuid + fileSuffix;
            // 创建新的文件
            File file = new File(ResourcePath.getResInstance().tempResource+ File.separator + fileName);
            // 文件夹不存在，则新建
            if (!file.exists()) {
                file.createNewFile();
            }
            // 完成文件的上传
            multipartFile.transferTo(file);
            return file;
        }
        catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

    public static void downLoad(HttpServletResponse response, String type, String filename, FileInputStream inputStream) throws IOException {

        response.setHeader("Content-type",type);
        // 设置编码
        String head = new String(filename.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
        // 设置扩展头，当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
        response.setHeader("Content-Disposition", "attachment;filename=" + head);
        OutputStream outputStream = response.getOutputStream();
        byte[] buff = new byte[1024];
        BufferedInputStream bis = null;
        // 读取filename
        bis = new BufferedInputStream(inputStream);
        int i = bis.read(buff);
        while (i != -1) {
            outputStream.write(buff, 0, buff.length);
            outputStream.flush();
            i = bis.read(buff);
        }
    }
}
